<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
    // 数组：就是一个特殊的对象，数组的属性名是浏览器给的，从0开始，依次递增，可以代表当前键值对的位置，也叫作索引
    // 天生自带一个length属性，其属性值代表数组的长度(值的个数)

    // var ary = [100,200,300,400];
    // console.log(ary);
    // ary.push

    // var ary = {
    //   push:function(){}
    // }
    //---------------------------------------
    //   - 1、push：
    //     + 含义：给数组末尾增加内容
    //     + 可以传多个值
    //     + 数组增加内容之后的长度
    //     + 原数组发生变化

        // let ary = [100,200,300,400]; // af0
        // console.log(ary.push(600,700));  // 6
        // console.log(ary); // [100,200,300,400,600,700]

        // ary[ary.length] = 600;
    //----------------------------------------

    // - 2、unshift
    //   + 含义：给数组开头增加内容
    //   + 可以传多个值
    //   + 数组增加内容之后的长度
    //   + 原数组发生变化

        // let ary = [100, 200, 300, 400];
        // console.log(ary.unshift(600, 700)); // 6
        // console.log(ary); // [600, 700, 100, 200, 300, 400]
  //------------------------------------------
  // - 3、pop
  //   + 含义：删除数组末尾最后一项
  //   + 无
  //   + 是删除的那一项
  //   + 原数组发生变化
  
    // let ary = [100, 200, 300, 400];
    // console.log(ary.pop()); // 400
    // console.log(ary); // [100,200,300]
    // //  ary.length--

 //------------------------------------------
//     - 4、shift
//     + 含义：删除数组开头第一项
//     + 无
//     + 是删除的那一项
//     + 原数组发生变化

  // let ary = [100, 200, 300, 400];
  // console.log(ary.shift()); // 100
  // console.log(ary); // [200,300,400]
 //------------------------------------------
//     - 5、splice
//     + 含义：数组的增删改
//     + 不固定
//     + 返回值：是一个新的数组，数组里存放的是删除的内容
//     + 原数组发生变化

    // let ary = [100, 200, 300, 400];
      // 1.不传参数
      // console.log(ary.splice());// []
      // console.log(ary); // [100, 200, 300, 400]

      // 2.传一个参数n：从索引n开始删除到末尾
      // console.log(ary.splice(2)); // [300,400]
      // console.log(ary.splice(10)); // []
      // console.log(ary); // [100,200]
      // 3.传两个参：n,m:从索引n开始，删除m个

        // console.log(ary.splice(1,2)); // [200,300]
        // console.log(ary); // [100,400]
        // 删除数组开头和数组末尾
        // 删除开头
        // ary.splice(0); // 清空数组

        // ary.shift();
        // ary.splice(0,1);// 删除数组开头

        // ary.splice(ary.length-1); // 删除数组末尾最后一项
        // ary.splice(ary.length-1,1); // 删除数组末尾最后一项
        // ary.length--;
        // ary.length-=1;
        // ary.pop()

      // 4.传3个参：n,m,x:从索引n开始，删除m个，用x进行替换
      // let ary = [100, 200, 300, 400];
      // ary.splice(1,1,600,900,800) // [200] (修改)
      // console.log(ary); // [100, 600, 900, 800, 300, 400]

      // 5. n,0,x:从索引n开始删除0个，把x放到索引n对应值的前面
      // ary.splice(1,0,600);
      // ary.splice(0,0,600); // 给数组开头增加
      // ary.unshfit()

      // ary.splice(ary.length,0,600) // 数组末尾新增

      // 把600放到300的后面
      // ary.splice(2+1,0,600)

      // console.log(ary);




  //------------------------------------------
//  -  6、slice
//     + 含义：数组的截取
//     + 不固定
//     + 返回值：是一个新的数组，数组里存放的是截取的内容
//     + 原数组不发生变化

// let ary = [100, 200, 300, 400];
      // 1.不传参

        // console.log(ary.slice()); // [100, 200, 300, 400] 克隆
      // 2.传一个参数n：从索引n开始截取到末尾
        // console.log(ary.slice(2)); // [300,400]

      // 3.传两个参数n,m:从索引n开始，截取到索引m，而且不包含m对应的那一项
      // console.log(ary.slice(1,2)); // [200]

      // 需求：截取 200,300,400
      // ary.slice(1) // [200,300,400]



      // console.log(ary); // [100, 200, 300, 400];

      // ary.slice();
      // ary.slice(0);
      // 克隆数组
    //-----------------------------------------
    // - 7、concat
    // + 含义：拼接数组
    // + 多个
    // + 返回值：是拼接之后的新数组
    // + 原数组不发生变化

    // let ary = [100,200,300,400];
    // console.log(ary.concat([600,700])); //  [100,200,300,400,600,700]
    // // console.log(ary.concat(true,null)); // [100,200,300,400,true,null]


    // console.log(ary); // [100,200,300,400];
  //--------------------------------------------------
  //  + 含义：把数组以特定的分隔符转化成字符串
  //   + 参数：字符串格式的分隔符
  //   + 返回值：是分隔之后的字符串
  //   + 原数组不发生变化

    // let ary = [100,200,300,400];
    // console.log(ary.join('$')); // '100$200$300$400'
    // console.log(ary.join('+')); // '100+200+300+400'
    // console.log(ary.join()); // '100,200,300,400' 如果不穿参，那分隔符默认就是逗号
    // console.log(ary.join('')); // '100200300400'

    // console.log(ary.join('+')); // '100+200+300+400'
    // eval:可以把字符串转化成js运算式

    // console.log(eval('100+200+300+400')); // 1000

    // function fn(){
    //   console.log(100);
    // };


    // eval( 'fn()')
    // console.log(eval(ary.join('+')));

    //-----------------------------------------------
    // - 9、reverse
    // + 含义：把数组倒叙
    // + 参数：无
    // + 返回值：倒叙之后的数组
    // + 原数组发生变化

        // let ary = [23,56,21,12,73];
        // console.log(ary.reverse()); // [73,12,21,56,23]
        // console.log(ary);// [73,12,21,56,23]
        // // reverse函数的返回值个ary是一个堆内存

        // // console.log(ary.reverse());

    //------------------------------------------------------------
    // - 10、sort
    // + 含义：把数组进行排序
    // + 参数：没有或者函数
    // + 返回值：排序之后的数组
    // + 原数组发生变化

        // let ary = [3,4,5,1,2,3,4,7,4];
        // console.log(ary.sort());
        // console.log(ary);
        // 如果排序的时候不传参，那只能给个位数的值进行从小到大排序

        // let ary = [7,111,22,11,9];
        // console.log(ary.sort(function(a,b){
        //   // console.log(a,b);
        //   // return a-b; // 从小到大排序
        //   return b-a; // 从大到小排序
        // }));

      // 三个 indexOf lastIndexOf includes  forEach map
      // 数组的去重和排序(利用对象的属性名不重复进行去重，冒泡排序)
      //节点之间的关系属性和dom的方法




    </script>
</body>

</html>